//
// Created by wlly-lzh on 24-5-24.
//

#ifndef DATA_STRUCTURE_TASK_FILE_H
#define DATA_STRUCTURE_TASK_FILE_H

#include <stdio.h>

#define SIZE_HEAD 512 // 哈夫曼表(数组)的长度
#define ASCII_CIDE 256 // ascii码的数量

typedef struct head head;
typedef struct storage_tree storage_tree;
typedef struct fast_index fast_index;
struct head {
	unsigned char ch;
	unsigned int count;
	int Parent;
	int Left;
	int Right;
};
struct storage_tree { // 用于写入压缩文件的哈夫曼表
	unsigned char ch;
	short int Parent;
	short int Left;
	short int Right;
};

struct fast_index { // 快速索引：用于存贮哈夫曼编码
	//unsigned char ch; // 对应的字符 ()
	char code[128];  // 哈夫曼编码
};
int head_of_file(FILE * file,head * H,int *length);
// 初始化 head 数组
// 统计字符、初始化参数、排序
// 返回出现的字符树,length为文件长度(按char计算)

unsigned char StrtoBin(char * ch);
// 将以‘0’、‘1’为主要内容的字符串转换为对应的二进制
// 要求字符串的字符长度为8
void BintoStr(char bin,char * ch);
// 将8位二进制数据转换成字符
void init_storage_tree(head * H,storage_tree * T);
// 初始化哈夫曼表
//
#endif //DATA_STRUCTURE_TASK_FILE_H
